package com.terry.trace.plugin;

import com.terry.trace.core.constant.LogLevelEnum;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 方法前后打印日志 注解类
 * 只能在方法上加注解，防止为了方便没有做过足够考虑，就直接作用在类上，而导致全类都前后打印日志而导致量过大
 * @author TerryJiang
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAround {

    /**
     * 日志级别(通过日志级别控制是否打印日志)，会同时作用于方法入参和返回值
     * 注意：如果是入参或者返回值的数据量比较大，或者不重要，可以设置为DEBUG级别，当需要打印日志查询问题时，可临时调整日志配置的日志级别为INFO级别
     * 默认:info级别
     */
    LogLevelEnum logLevel() default LogLevelEnum.INFO;

    /**
     * 是否记录方法参数
     * 默认:记录
     */
    boolean logParameter() default true;

    /**
     * 是否记录方法返回值
     * 默认:记录
     */
    boolean logReturnValue() default true;
}
